﻿using Common.Infrastructure.Service;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Text;

namespace Common.Infrastructure
{
    public static class LibMessageUtils
    {
        public static string GetLang(IServiceProvider provider)
        {
            var messageM = GetMessageManage(provider);
            return messageM.Lang;
        }

        public static void AddError(IServiceProvider provider, string message)
        {
            var messageM = GetMessageManage(provider);
            messageM.AddError(message);
        }

        public static void AddError(IServiceProvider provider, string code, params object[] objs)
        {
            var messageM = GetMessageManage(provider);
            messageM.AddError(code, objs);
        }

        public static void AddWarning(IServiceProvider provider, string message)
        {
            var messageM = GetMessageManage(provider);
            messageM.AddWarning(message);
        }

        public static void AddWarning(IServiceProvider provider, string code, params object[] objs)
        {
            var messageM = GetMessageManage(provider);
            messageM.AddWarning(code, objs);
        }

        public static void AddInfomation(IServiceProvider provider, string message)
        {
            var messageM = GetMessageManage(provider);
            messageM.AddInfomation(message);
        }

        public static void AddInfomation(IServiceProvider provider, string code, params object[] objs)
        {
            var messageM = GetMessageManage(provider);
            messageM.AddInfomation(code, objs);
        }

        public static string GetMessage(IServiceProvider provider, string code, params object[] objs)
        {
            var messageM = GetMessageManage(provider);
            return messageM.GetMessage(code, objs);
        }

        public static void ThrowError(IServiceProvider provider, string code, params object[] objs)
        {
            var messageM = GetMessageManage(provider);
            messageM.ThrowError(code, objs);
        }

        public static bool HasError(IServiceProvider provider)
        {
            var messageM = GetMessageManage(provider);
            return messageM.HasError();
        }

        public static List<ApiActionMessage> GetMessages(IServiceProvider provider)
        {
            var messageM = GetMessageManage(provider);
            return messageM.GetMessages();
        }

        public static void AddActionMessage(IServiceProvider provider, ApiActionMessage actionMessage)
        {
            var messageM = GetMessageManage(provider);
            messageM.AddActionMessage(actionMessage);
        }

        public static void MessageToActionResult<T>(IServiceProvider provider, ApiActionResult<T> actionResult)
        {
            var messageM = GetMessageManage(provider);
            messageM.MessageToActionResult<T>(actionResult);
        }

        private static IMessageService GetMessageManage(IServiceProvider provider)
        {
            IMessageService clientFactory = null;
            try
            {
                if (provider != null)
                {
                    clientFactory = provider.GetService<IMessageService>();
                }
            }
            catch 
            { 
            }

            return clientFactory == null ? throw new CommonException("IMessageService null") : clientFactory;
        }
    }
}
